package cn.uai.activiti8.service;

public interface PortalService {

    /**
     * 启动流程实例
     * @param body 启动流程实例时请求体
     * @return
     */
    String start(String body);

    /**
     * 完成审批
     * @param body 完成审批时的请求体
     * @return
     */
    String complete(String body);

    /**
     * 完成委派审批任务
     * @param body 完成委派审批时的请求体
     * @return
     */
    String completeDelegation(String body);

    /**
     * 签收任务
     * @param body 签收任务时的请求体
     * @return
     */
    String claim(String body);

    /**
     * 转办任务
     * @param body 转办任务时的请求体
     * @return
     */
    String assign(String body);

    /**
     * 委派
     * @param body 委派时的请求体
     * @return
     */
    String delegate(String body);

    /**
     * 驳回
     * @param body 驳回时的请求体
     * @return
     */
    String reject(String body);

    /**
     * 驳回至申请节点
     * @param body 驳回至申请节点时的请求体
     * @return
     */
    String reject2Apply(String body);

    /**
     * 驳回至任意节点
     * @param body 驳回至任意节点时的请求体
     * @return
     */
    String reject2Any(String body);

    /**
     * 待办任务查询
     * @param uid 用户id
     * @return 待办任务列表
     */
    String taskQuery(Long uid);

    /**
     * 待办任务查询
     * @param userName 用户名
     * @return 待办任务列表
     */
    String taskQuery(String userName);

    /**
     * 候选人任务查询
     * @param userName 用户名
     * @return
     */
    String candidateUserTaskQuery(String userName);

    /**
     * 候选组任务查询
     * @param groupName 组名
     * @return
     */
    String candidateGroupTaskQuery(String groupName);

    /**
     * 手动部署审批
     * 备注：按照 Activiti 的规范，把 bpmn20.xml 文件放在 /resource/processes 下，启动 SpringBoot 时会自动解析该文件并部署流程
     * @param body 部署审批服务时的请求体
     * @return
     */
    String deploy(String body);

    /**
     * 用 deployId 查询已部署的流程定义
     * @param deployId 部署id
     * @return
     */
    String processDefinitionQuery(String deployId);

    /**
     * 用 processDefinitionName 查询已部署的有哪些流程定义
     * @param processDefinitionName 流程定义名称
     * @return
     */
    String processDefinitionDeployQuery(String processDefinitionName);
}
